<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    var name = "The Window";
    let object = {
        name : "My Object",
        getNameFunc : function(){
            //这个是一个匿名函数不是object对象的属性和成员函数，则匿名函数中的this指向的肯定是window---window
            return function(){
                return this.name;
            };
        },
        getNameFunc2 : function(){
            //闭包，保存了this  成员，谁调用，this指向谁----object
            console.log('getNameFunc2',this)
            var that = this;
            return function(){
                return that.name;
            };
        },
        getNameFunc3(){
            console.log('getNameFunc3',this)
            //成员，谁调用，this指向谁----object
            return this.name;
        },
        getNameFunc4 : () => {
            console.log('getNameFunc4',this)
            //这个是一个匿名函数不是object对象的属性和成员函数，则匿名函数中的this指向的肯定是window----window
            return function(){
                return this.name;
            };
        },
        getNameFunc5 : function(){
            //箭头函数中的this指向是固定不变的，一直指向的是定义函数的环境。---object
            return () => {
                return this.name;
            };
        },
    };
    alert(object.getNameFunc()()+'  '+object.getNameFunc2()()+'  '+object.getNameFunc3()+'  '+object.getNameFunc4()()+'  '+object.getNameFunc5()());


</script>
</body>
</html>